package com.zx._06_JVM.chapter_02_gc;

import com.zx.common.util.ThreadUtil;

public class 修改GC {

    static Inner inner = null;

    public static void main(String[] args) {
        inner = new Inner();
        System.out.println(inner);

        // 第一次回收，调用finalize救一次
        inner = null;
        System.gc();
        // 回收时调用finalize，是非阻塞的，需要等一下程序调用finalize
        ThreadUtil.sleep(1L);
        System.out.println(inner);

        // 第一次回收，每个对象值调用finalize一次，对象真的被回收了。
        inner = null;
        System.gc();
        ThreadUtil.sleep(1L);
        System.out.println(inner);


    }

    private static class Inner {
        @Override
        protected void finalize() throws Throwable {
            super.finalize();
            System.out.println("调用 finalize");
            inner = this;
        }
    }
}
